package controladores;

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;








import modelo.Evento;
import modelo.Lugar;
import modelo.Seccion;

import modelo.TipoEvento;
import modeloDAO.DaoEvento;
import modeloDAO.DaoLugar;
import modeloDAO.DaoSeccion;
import modeloDAO.DaoTipoEvento;

import org.zkoss.util.media.Media;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.MouseEvent;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Image;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Row;
import org.zkoss.zul.Textbox;

public class ControladorRegistrarEvento extends SelectorComposer<Component> {
    
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private Evento evento = new Evento();

	
	
   private DaoLugar daoLugar= new DaoLugar();
   private DaoTipoEvento daoTipo = new DaoTipoEvento();
   
   private DaoSeccion daoSeccion= new DaoSeccion();
   private DaoEvento daoEvento= new DaoEvento();
  
   
   private List<TipoEvento> ListaTipoEven;
   private List<Lugar> ListaLugares;
   private List<Seccion> ListaSecciones;
   
   
  
    @Wire
    private Textbox nombre;
    @Wire
    private Textbox codigo;
    @Wire
    private Datebox fechaFinEven;
    @Wire
    private Datebox fechaInicioEven;
    @Wire
    private Combobox cmbTipo;
    @Wire
    private Combobox cmbLugar;
    @Wire
    private Listbox ListBoxSecciones;
    @Wire
    private Button btnRegistrar;
    @Wire
    private Button btnCancelar;
    @Wire 
    private Intbox costo;
    @Wire
    private Row codi;
  
    

		
    public ControladorRegistrarEvento() {
		super();
		// TODO Auto-generated constructor stub

		try 
		{
			ListaLugares = daoLugar.obtenerTodos();
			ListaTipoEven = daoTipo.obtenerTodos();
			ListaSecciones = daoSeccion.obtenerTodos();
			/**/
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
  
   public void generarCodigo() throws Exception{
   	int i= daoEvento.obtenerTodos().size();
   	i=i+1;
   	System.out.println("cantidad:   "+i);
   		if(i<10)
   	{
   		codigo.setValue("E0"+0+i);
   		
   	}else if(i>=10)
   		{
   			codigo.setValue("E"+0+i);
   		}else if(i>100)
   		{
   			codigo.setValue("E"+i);
   		}
   		
   	
   	
   }
   
	public List<Lugar> getLugares(){
		List<Lugar> lugares = new ArrayList<>();
		for(int i=0; i<ListaLugares.size();i++)
 		{
 			lugares.add(ListaLugares.get(i));
 			
 		}
 		return lugares;
		
	}
	
	public List<TipoEvento> getTipoEventos(){
		List<TipoEvento> tipoEventos = new ArrayList<>();
		for(int i=0; i<ListaTipoEven.size();i++)
  		{
  			tipoEventos.add(ListaTipoEven.get(i));
  		}
  		return tipoEventos;
  	
	}
	
	
	public List<Seccion> getSecciones(){
		List<Seccion> secciones = new ArrayList<>();
		for(int i=0; i<ListaSecciones.size();i++)
  		{
  			secciones.add(ListaSecciones.get(i));
  		}
  		return secciones;
  	
		
	}  
  

   public int buscarLugar (String nombre)
	{	
	  try {			  
		for (int i=0; i<daoLugar.obtenerTodos().size(); i++){      
	        if (daoLugar.obtenerTodos().get(i).getNombre().equals(nombre))
		  {	  
	        	  return i;
	      }
		}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			  return -1; 
	}
   
   public int buscarTipoEvento (String nombre)
	{	
	  try {			  
		for (int i=0; i<daoTipo.obtenerTodos().size(); i++){      
	        if (daoTipo.obtenerTodos().get(i).getNombre().equals(nombre))
		  {	  
	        	  return i;
	      }
		}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			  return -1; 
	}
   

	
   
	@Listen("onClick=#btnRegistrar")
	public void onClick$btnRegistrar(MouseEvent event){
		if(nombre.getValue().equals(null)||fechaInicioEven.getValue().equals(null) 
				|| fechaFinEven.getValue().equals(null)
				|| costo.getValue().equals(null)
				|| cmbLugar.getValue().equals(-1)
				|| cmbTipo.getValue().equals(-1)
				||ListBoxSecciones.getSelectedItems().equals(-1)){
			Clients.showNotification("Debe Completar todos los campos", "info", null, null, 1000);
		}else{
		  Lugar encontroL = new Lugar();
		  TipoEvento encontroTipo = new TipoEvento();
		 
		  try {	
			 int posi= this.buscarLugar(cmbLugar.getValue());
			 int posiTipo= this.buscarTipoEvento(cmbTipo.getValue());
			 
			 encontroL = daoLugar.obtenerTodos().get(posi);
			 encontroTipo = daoTipo.obtenerTodos().get(posiTipo);
			 
			
				} catch (Exception e) {
					// TODO Auto-generated catch block
				  e.printStackTrace();	
				}
		  
		
		
		 try {
			this.generarCodigo();
		} catch (Exception e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		  evento.setCodEvento(codigo.getValue());
		  evento.setNombreEvento(nombre.getValue());
		  evento.setFechaIncio(fechaInicioEven.getValue());
		  evento.setFechaFin(fechaFinEven.getValue());
		  evento.setCosto(costo.getValue());
		
		  evento.setLugar(encontroL);
		  evento.setTipoEvento(encontroTipo);
		  
		  Set<Seccion> seccion = new LinkedHashSet<Seccion>();
		  
		  Set seccionAux = ListBoxSecciones.getSelectedItems();
		  for(Iterator i = seccionAux.iterator(); i.hasNext();) {
			  Listitem selec = (Listitem) i.next();
			  Seccion otra = (Seccion) selec.getValue();
			  seccion.add(otra);
		  }
		  
		  evento.setSecciones(seccion);
		  
		  /*SeccionxEvento seccionax = ListBoxSecciones.getSelectedItem().getValue();
		  Set<SeccionxEvento> seccioness = new LinkedHashSet<SeccionxEvento>();
		  seccioness.add(seccionax);
		  
		  System.out.println(seccionax);*/
		  

		  try {
			 // daoSeccionEvento.agregarSeccionEvento(seccionax);
			  daoEvento.agregarEvento(evento);
			  
			  this.LimpiarCampos();
			  Clients.showNotification("Registro Exitoso, para salir de aqui clickee cancelar", "info", null, null, 1000);
			  
			  
			  System.out.println("aqui");
			 
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();	
		}
			}
		
}
    
    @Listen("onClick=#btnCancelar")
    public void onClick$btnCancelar(MouseEvent event){
				  		 
			Messagebox.show("Desea cancelar?", "btnCancelar", Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION);

			Executions.sendRedirect("index.zul");
	 
		}    
		    	
		    	
    
    public void LimpiarCampos(){
   	 codigo.setText("");
   	 nombre.setText("");
   	 fechaInicioEven.setText("");
   	 fechaFinEven.setText("");
   	 costo.setText("");
   	 ListBoxSecciones.getItemAtIndex(0);
   	 cmbLugar.setText("");
   	 cmbTipo.setText("");
    }

}
